home *** CD-ROM | disk | FTP | other *** search
- #!PATCHIT.PRG
- #
- # Patches fuer Probleme mit WM_ARROWED-Nachrichten in GEM 3.2
- #
- # Versionen:
- # 1.0 mo 28.02.92 Basisversion (entspricht ARROWFIX v1.1)
- #
- # Autoren:
- # mo (\/) Martin Osieka, Erbacherstr. 2, D-6100 Darmstadt
- #
-
- PRINTF( "ARROWFIX v1.1\n")
- IF (ARGC() < 2) THEN
- ABORT( "Missing TOS filename\n")
- ENDIF
- IF ((fp = FOPEN( ARGV( 1), "r+b")) == 0) THEN
- ABORT( "Can't open '%s'\n", ARGV( 1))
- ENDIF
- FBASE( fp, $E00000)
-
- # TOS-Image pruefen
- tossize = FSIZE( fp)
- tosversion = FPEEKW( fp, $E00002)
- IF (tosversion == $206) && (tossize == $40000) THEN
- accessw = 2
- ELIF (tosversion == $306) AND (tossize == $80000) THEN
- accessw = 4
- ELSE
- ABORT( "Illegal TOS fileformat\n")
- ENDIF
-
- # GEM-Position bestimmen
- gemmagic = FPEEKL( fp, $E00014)
- gemtext = FPEEKL( fp, gemmagic + 8)
-
- # GEM Version pruefen
- gemversion = FPEEKW( fp, gemtext + $276)
- IF (gemversion != $0320) THEN
- ABORT( "Illegal TOS version\n")
- ENDIF
-
- # a) Ueberlaengenwert auf 0 setzen
- FSEEK( fp, gemtext + $1D56, 0)
- FPUTW( fp, $317C, $0000, $002C) # MOVE.W #0,$2C(A0)
-
- # b) Warteroutine von ARROW-Repeat aendern
- irtime = FPEEKL( fp, gemtext + $CAC6)
- emplayall = FPEEKL( fp, gemtext + $271A)
- FSEEK( fp, gemtext + $CB6A, 0)
- FPUTW( fp, $2C08) # MOVE.L A0,D6
- FPUTW( fp, $49F9) # LEA.L irtime,A4
- FPUTL( fp, irtime)
- FPUTW( fp, $DC94) # ADD.L (A4),D6
- FPUTW( fp, $4EB9) # JSR emplayall
- FPUTL( fp, emplayall)
- FPUTW( fp, $BC94) # CMP.L (A4),D6
- FPUTW( fp, $64F6) # BCC.B $F6
- FPUTW( fp, $4E75) # RTS
-
- # c) Applikationsstatus anders abfragen
- FSEEK( fp, gemtext + $1CF0, 0)
- FPUTW( fp, $0828, $0001, $001F) # BTST #1,$1F(A0)
- FPUTW( fp, $672E) # BEQ.B $2E
-
- PRINTF( "Calculate CRCs\n")
- TOSCRC( fp, accessw)
- IF (accessw == 2) THEN
- FPUTW( fp, CRC( 0), CRC( 1))
- ELSE
- FPUTL( fp, CRC( 0), CRC( 1))
- ENDIF
-
- IF (FERROR( fp)) THEN
- ABORT( "Write error in '%s'\n", ARGV( 1));
- ENDIF
-
- FCLOSE( fp)
-
- PRINTF( "OK\n")
-